package thread.produce_customer_base_muti_die;

/**
 * Created by mHandler on 2018/6/2 0002.
 * Description:此方式共享一个变量并通过其唤醒线程，针对单个生产者和消费者线程模式下可保证同步。
 * 若有多个生产者和消费者线程，由于notify的随机性可能造成生产者唤醒生产者，消费者唤醒消费者的情况
 * 造成线程假死状态。
 */
public class Customer {
    private String lock;

    public Customer(String lock) {
        this.lock = lock;
    }
    public void getValue(){
        try {
            synchronized (lock){
                if (ValueObject.value.equals("")){
                    System.out.println("消费者："+Thread.currentThread().getName()+"进入等待");
                    lock.wait();
                }
                System.out.println("消费者："+Thread.currentThread().getName()+"执行了");
                ValueObject.value = "";
                lock.notify();
                //lock.notifyAll();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
